package com.base.utils;

/**
 * 分页类
 *
 * @author flh
 */
public class Page {

    /**
     * currentPage 开始数 传递进SQL的 LIMIT (1,2) ‘1数据’
     */
    private int currentPage;
    /**
     * currentPageNo 当前页 接口传递的页码
     */
    private int currentPageNo = 1;
    /**
     * pageSize 每页大小 传递进SQL的 LIMIT (1,2) ‘2数据’
     */
    private int pageSize = 10;
    /**
     * pageTotal 总页数
     */
    private int pageTotal;
    /**
     * recordTotal 总条数
     */
    private int recordTotal = 0;
    /**
     * firstPage 第一页
     */
    private int firstPage = 1;
    /**
     * lastPage 最后一页
     */
    private int lastPage;

    // 以下set方式是需要赋值的

    //TODO
    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
    }

    /**
     * 设置当前页
     *
     * @param currentPageNo
     */
    public void setCurrentPageNo(Integer currentPageNo) {
        this.currentPageNo = currentPageNo == null ? 1 : currentPageNo;
    }

    /**
     * 设置每页大小，也可以不用赋值，默认大小为10条
     *
     * @param pageSize
     */
    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    /**
     * 设置总条数，这个必须得最后调用，默认为0
     *
     * @param recordTotal
     */
    public void setRecordTotal(Integer recordTotal) {
        this.recordTotal = recordTotal;
        otherAttr();
    }

    /**
     * 设置其他参数
     */
    public void otherAttr() {
        // 总页数
        this.pageTotal = this.recordTotal % this.pageSize > 0 ? this.recordTotal / this.pageSize + 1
                : this.recordTotal / this.pageSize;
        // 第一页
        this.firstPage = 1;
        // 如果总页数 > 0 and 当前页 > 1 and 当前页  > 总页数
        if (pageTotal > 0 && currentPageNo > 1 && currentPageNo > pageTotal) {
            currentPageNo = pageTotal; // 当前页 = 总页数
        }
        // 开始数
        this.currentPage = (currentPageNo - 1) * pageSize;
        // 最后一页
        this.lastPage = this.pageTotal;
    }

    // 放开私有属性
    public int getCurrentPageNo() {
        return currentPageNo;
    }

    public int getCurrentPage() {
        return currentPage;
    }

    public int getPageSize() {
        return pageSize;
    }

    public int getPageTotal() {
        return pageTotal;
    }

    public int getRecordTotal() {
        return recordTotal;
    }

    public int getFirstPage() {
        return firstPage;
    }

    public int getLastPage() {
        return lastPage;
    }

    public Page() {
        super();
    }

    public Page(Integer currentPageNo) {
        super();
        this.currentPageNo = currentPageNo;
    }
}
